#include <iostream>
#include <pthread.h>
#include <unistd.h>

void *thread(void *msg)
{
    std::string name = static_cast<char *>(msg);
    int cnt = 5;
    pthread_t id = pthread_self();
    while (cnt--)
    {
        std::cout << "thread name : " << name << " ,id : " << id << std::endl;
        if (cnt == 1)
        {
            // 线程退出
            // exit(1);  终止进程
            // return (void*) 666;
            pthread_exit((void *)100);
        }
        sleep(1);
    }
    return (void *)1;
}

int main()
{
    pthread_t tid;
    int n = pthread_create(&tid, nullptr, thread, (void *)"thread - 1");
    if (n != 0)
    {
        std::cout << "create err" << std::endl;
        exit(1);
    }
    int cnt = 3;
    while (cnt--)
    {
        // std::cout << "main thread : " << std::endl;
        std::cout << "thread name id : " << pthread_self() << std::endl;
        sleep(1);
    }
    std::cout << "取消进程" << std::endl;
    pthread_cancel(tid);
    void *ret = nullptr;
    pthread_join(tid, &ret);
    std::cout << "new thread exit : " << (long long int)ret << std::endl;
    return 0;
}

// #include <iostream>
// #include <string>
// #include <unistd.h>
// #include <pthread.h>
// int cnt = 0;
// void *test_thread(void *name)
// {
//     while (true)
//     {
//         sleep(1);
//         std::cout << "name : " << name << std::endl;
//     }
// }
// int main()
// {
//     pthread_t lwp;
//     pthread_create(&lwp, nullptr, test_thread, (void *)"thread1");

//     while (true)
//     {
//         std::cout << "main thread " << std::endl;
//         sleep(1);
//     }
//     return 0;
// }